// app.js
App({
  onLaunch() {
    // 初始化用户数据
    this.globalData = {
      userInfo: null,
     积分: 100, // 初始积分
      收藏: [],
      学习计划: []
    }
    
    // 模拟登录状态检查
    wx.getStorage({
      key: 'userInfo',
      success: (res) => {
        this.globalData.userInfo = res.data
      }
    })
    
    // 检查 token 并更新全局数据
    wx.getStorage({
      key: 'token',
      success: (res) => {
        this.globalData.token = res.data
      }
    })
  },
  
  // 全局方法：添加收藏
  addToFavorites(item) {
    const index = this.globalData.收藏.findIndex(i => i.id === item.id)
    if (index === -1) {
      this.globalData.收藏.unshift({...item, 收藏时间: new Date().getTime()})
      wx.setStorage({
        key: 'favorites',
        data: this.globalData.收藏
      })
      return true
    }
    return false
  },
  
  // 全局方法：移除收藏
  removeFromFavorites(id) {
    this.globalData.收藏 = this.globalData.收藏.filter(item => item.id !== id)
    wx.setStorage({
      key: 'favorites',
      data: this.globalData.收藏
    })
  },
  
  // 全局方法：添加到学习计划
  addToStudyPlan(item) {
    const index = this.globalData.学习计划.findIndex(i => i.id === item.id)
    if (index === -1) {
      this.globalData.学习计划.unshift({...item, 添加时间: new Date().getTime()})
      wx.setStorage({
        key: 'studyPlan',
        data: this.globalData.学习计划
      })
      return true
    }
    return false
  },
  
  // 全局方法：更新积分
  updatePoints(amount) {
    this.globalData.积分 = Math.max(0, this.globalData.积分 + amount)
    wx.setStorage({
      key: 'points',
      data: this.globalData.积分
    })
  },
  
  // 全局方法：带 token 的网络请求
  requestWithToken(options) {
    // 复制原始选项
    const requestOptions = { ...options };
    
    // 确保 header 存在
    requestOptions.header = requestOptions.header || {};
    
    // 添加 token 到请求头
    if (this.globalData.token) {
      requestOptions.header['Authorization'] = this.globalData.token;
    }
    
    // 添加默认的 Content-Type
    if (!requestOptions.header['Content-Type']) {
      requestOptions.header['Content-Type'] = 'application/x-www-form-urlencoded';
    }
    
    // 处理失败回调，特别是 token 过期的情况
    const originalFail = requestOptions.fail;
    requestOptions.fail = (res) => {
      // 如果是 401 或 token 相关错误，需要重新登录
      if (res.statusCode === 401 || (res.data && res.data.msg === '请先登录')) {
        wx.removeStorageSync('token');
        this.globalData.token = null;
        // 跳转到登录页或者提示用户重新登录
        wx.showToast({
          title: '登录已过期，请重新登录',
          icon: 'none'
        });
        // 这里可以根据需要跳转到登录页面
      }
      
      // 调用原始的失败回调（如果有）
      if (originalFail) {
        originalFail(res);
      }
    };
    
    // 发起请求
    return wx.request(requestOptions);
  }
})
    